import { fileURLToPath, URL } from 'node:url'
import { defineConfig, loadEnv } from 'vite'

import useViteBuild from './build/build'
// 插件拆出去 用于区分开发和打包加载不同插件类型
import useVitePlugins from './build/plugins'
import useProxy from './build/proxy'
import { wrapperEnv } from './build/utils'

export default defineConfig(({ command, mode }) => {
  const isBuild = command === 'build'

  // 提取环境文件
  const root = process.cwd()
  const env = loadEnv(mode, root)
  const viteEnv = wrapperEnv(env)
  return {
    base: '/',
    plugins: useVitePlugins(isBuild, viteEnv),
    resolve: {
      alias: {
        '@': fileURLToPath(new URL('./src', import.meta.url)),
        '#': fileURLToPath(new URL('./types', import.meta.url)),
      },
    },
    build: useViteBuild(viteEnv),
    server: {
      host: '0.0.0.0',
      port: viteEnv.VITE_PORT,
      hmr: true,
      // cors: true,
      proxy: useProxy(viteEnv.VITE_PROXY),
      // 提前转换和缓存文件以进行预热。可以在服务器启动时提高初始页面加载速度，并防止转换瀑布。
      warmup: {
        // 请注意，只应该预热频繁使用的文件，以免在启动时过载 Vite 开发服务器
        // 可以通过运行 npx vite --debug transform 并检查日志来找到频繁使用的文件
        clientFiles: ['./index.html', './src/{components,api}/*'],
      },
    },
    css: {
      preprocessorOptions: {
        // 全局样式变量预注入
        less: {
          additionalData: `@import "@/styles/variable.less";`,
          // 这个会自动编译less变量 引起错误
          // math: 'always',
          globalVars: {
            'theme-color': env.VITE_APP_THEME_COLOR,
            'split-line': '#ECEFF8',
          },
        },
        scss: {
          api: 'modern-compiler', // or "modern", "legacy"
        },
      },
    },
  }
})
